import axios from 'axios';
import qs from 'qs'
import md5 from 'js-md5';
import {Indicator} from 'mint-ui';
import { Toast } from 'vant';
import { Dialog } from 'vant';
import utils from '@/lib/StringExtend';
import store from './store/Store.js'

// axios 配置
var instance = axios.create({
  headers:{
    'Content-Type': 'application/x-www-form-urlencoded',
    'accept': 'application/json'
  },
  timeout: 30000,
  baseURL: '/',   //接口请求地址
	withCredentials: false,
});

//可以在这先申明错误代码表示的含义


// 添加请求拦截器
instance.interceptors.request.use(config => {
  if(config.data === undefined){    //无参数传入，重新赋值对象类型
    config.data = Object();
  }else {
    Object.keys(config.data).forEach(function(key){
      if (utils.isNone(config.data[key])) {
        delete config.data[key]
      }
    });
  }
  if(config.data.sign !== undefined){
    delete config.data.sign;
  }
  config.data = utils.objKeySort(config.data);   //对象排序
  config.data.sign = md5(qs.stringify(config.data));  //MD5 签名方法:sign = Md5(拼接的待签名字符串)
  config.data = qs.stringify(config.data);   //拼接的字符串
  return config
}, error => {
  // 对请求错误做些什么
  console.log(error); // for debug
  return Promise.reject(error);
});

// 添加响应拦截器
instance.interceptors.response.use(response => {
  // 对响应数据做点什么
  const res = response.data;
  // console.log(res)
  if (res.errcode === '500'){
    store.commit('registerBit', true);
  }
  //对错误代码做处理
  return res;
}, error => {
  // 对响应错误做点什么
  Indicator.close();
  Dialog({ message: error });
  console.log('err' + error);// for debug
  return Promise.reject(error);
});

export default instance;

/**
 * post 请求方法
 * @param url
 * @param data
 * @returns {Promise}
 */
export function post(url, data = {}) {
  return new Promise((resolve, reject) => {
    instance.post(url, data).then(response => {
      //对接口错误码做处理
      resolve(response.data);
    }, err => {
      reject(err);
    })
  })
}

/**
 * get 请求方法
 * @param url
 * @param data
 * @returns {Promise}
 */
export function get(url, data = {}) {
  return new Promise((resolve, reject) => {
    instance.get(url, {
      params: data
    })
      .then(response => {
        resolve(response);
      })
      .catch(err => {
        reject(err)
      })
  })
}

/**
 * 封装所有请求
 * @param methed
 * @param url
 * @param data
 * @param headers
 * @returns {Promise}
 */
export function request(methed,url, data = {},headers) {
  return new Promise((resolve, reject) => {
    instance({
      method: methed || 'post',
      url:url,
      data: methed === 'get' ? { params: data } : data,
      headers: headers || {'Content-Type':'application/json'},
    })
      .then(response => {
        //对接口错误码做处理
        resolve(response.data);
      })
      .catch(err => {
        reject(err)
      })
  })
}
